<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2">
<meta name="theme-color" content="#222">
<meta name="generator" content="Hexo 5.4.0">
  <link rel="apple-touch-icon" sizes="180x180" href="/images/apple-touch-icon-next.png">
  <link rel="icon" type="image/png" sizes="32x32" href="/images/favicon-32x32-next.png">
  <link rel="icon" type="image/png" sizes="16x16" href="/images/favicon-16x16-next.png">
  <link rel="mask-icon" href="/images/logo.svg" color="#222">

<link rel="stylesheet" href="/css/main.css">


<link rel="stylesheet" href="/lib/font-awesome/css/all.min.css">

<script id="hexo-configurations">
    var NexT = window.NexT || {};
    var CONFIG = {"hostname":"example.com","root":"/","scheme":"Gemini","version":"7.8.0","exturl":false,"sidebar":{"position":"left","display":"post","padding":18,"offset":12,"onmobile":false},"copycode":{"enable":false,"show_result":false,"style":null},"back2top":{"enable":true,"sidebar":false,"scrollpercent":false},"bookmark":{"enable":false,"color":"#222","save":"auto"},"fancybox":false,"mediumzoom":false,"lazyload":false,"pangu":false,"comments":{"style":"tabs","active":null,"storage":true,"lazyload":false,"nav":null},"algolia":{"hits":{"per_page":10},"labels":{"input_placeholder":"Search for Posts","hits_empty":"We didn't find any results for the search: ${query}","hits_stats":"${hits} results found in ${time} ms"}},"localsearch":{"enable":false,"trigger":"auto","top_n_per_article":1,"unescape":false,"preload":false},"motion":{"enable":true,"async":false,"transition":{"post_block":"fadeIn","post_header":"slideDownIn","post_body":"slideDownIn","coll_header":"slideLeftIn","sidebar":"slideUpIn"}}};
  </script>

  <meta name="description" content="VHDL是一门很厉害的语言，它强大的设计电路功能让人眼前一亮。 个人觉得VHDL这门语言与以往所学的语言大相径庭，但也有共同之处，你甚至能在里面看到很多汇编的影子。学一门语言我是打算按程序结构入手，逐渐递进，最后到完整的程序设定。">
<meta property="og:type" content="article">
<meta property="og:title" content="VHDL简易入门">
<meta property="og:url" content="http://example.com/2022/01/01/FPGA/index.html">
<meta property="og:site_name" content="-北真海-">
<meta property="og:description" content="VHDL是一门很厉害的语言，它强大的设计电路功能让人眼前一亮。 个人觉得VHDL这门语言与以往所学的语言大相径庭，但也有共同之处，你甚至能在里面看到很多汇编的影子。学一门语言我是打算按程序结构入手，逐渐递进，最后到完整的程序设定。">
<meta property="og:locale" content="zh_CN">
<meta property="article:published_time" content="2022-01-01T15:17:53.255Z">
<meta property="article:modified_time" content="2022-01-01T16:18:48.406Z">
<meta property="article:author" content="花">
<meta name="twitter:card" content="summary">

<link rel="canonical" href="http://example.com/2022/01/01/FPGA/">


<script id="page-configurations">
  // https://hexo.io/docs/variables.html
  CONFIG.page = {
    sidebar: "",
    isHome : false,
    isPost : true,
    lang   : 'zh-CN'
  };
</script>

  <title>VHDL简易入门 | -北真海-</title>
  






  <noscript>
  <style>
  .use-motion .brand,
  .use-motion .menu-item,
  .sidebar-inner,
  .use-motion .post-block,
  .use-motion .pagination,
  .use-motion .comments,
  .use-motion .post-header,
  .use-motion .post-body,
  .use-motion .collection-header { opacity: initial; }

  .use-motion .site-title,
  .use-motion .site-subtitle {
    opacity: initial;
    top: initial;
  }

  .use-motion .logo-line-before i { left: initial; }
  .use-motion .logo-line-after i { right: initial; }
  </style>
</noscript>

</head>

<body itemscope itemtype="http://schema.org/WebPage">
  <div class="container use-motion">
    <div class="headband"></div>

    <header class="header" itemscope itemtype="http://schema.org/WPHeader">
      <div class="header-inner"><div class="site-brand-container">
  <div class="site-nav-toggle">
    <div class="toggle" aria-label="切换导航栏">
      <span class="toggle-line toggle-line-first"></span>
      <span class="toggle-line toggle-line-middle"></span>
      <span class="toggle-line toggle-line-last"></span>
    </div>
  </div>

  <div class="site-meta">

    <a href="/" class="brand" rel="start">
      <span class="logo-line-before"><i></i></span>
      <h1 class="site-title">-北真海-</h1>
      <span class="logo-line-after"><i></i></span>
    </a>
      <p class="site-subtitle" itemprop="description">cybercolyce</p>
  </div>

  <div class="site-nav-right">
    <div class="toggle popup-trigger">
    </div>
  </div>
</div>




<nav class="site-nav">
  <ul id="menu" class="main-menu menu">
        <li class="menu-item menu-item-home">

    <a href="/" rel="section"><i class="fa fa-home fa-fw"></i>首页</a>

  </li>
        <li class="menu-item menu-item-archives">

    <a href="/archives/" rel="section"><i class="fa fa-archive fa-fw"></i>归档</a>

  </li>
  </ul>
</nav>




</div>
    </header>

    
  <div class="back-to-top">
    <i class="fa fa-arrow-up"></i>
    <span>0%</span>
  </div>


    <main class="main">
      <div class="main-inner">
        <div class="content-wrap">
          

          <div class="content post posts-expand">
            

    
  
  
  <article itemscope itemtype="http://schema.org/Article" class="post-block" lang="zh-CN">
    <link itemprop="mainEntityOfPage" href="http://example.com/2022/01/01/FPGA/">

    <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
      <meta itemprop="image" content="/images/avatar.gif">
      <meta itemprop="name" content="花">
      <meta itemprop="description" content="我最喜欢cybersh1t了">
    </span>

    <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
      <meta itemprop="name" content="-北真海-">
    </span>
      <header class="post-header">
        <h1 class="post-title" itemprop="name headline">
          VHDL简易入门
        </h1>

        <div class="post-meta">
            <span class="post-meta-item">
              <span class="post-meta-item-icon">
                <i class="far fa-calendar"></i>
              </span>
              <span class="post-meta-item-text">发表于</span>

              <time title="创建时间：2022-01-01 23:17:53" itemprop="dateCreated datePublished" datetime="2022-01-01T23:17:53+08:00">2022-01-01</time>
            </span>
              <span class="post-meta-item">
                <span class="post-meta-item-icon">
                  <i class="far fa-calendar-check"></i>
                </span>
                <span class="post-meta-item-text">更新于</span>
                <time title="修改时间：2022-01-02 00:18:48" itemprop="dateModified" datetime="2022-01-02T00:18:48+08:00">2022-01-02</time>
              </span>

          

        </div>
      </header>

    
    
    
    <div class="post-body" itemprop="articleBody">

      
        <p>VHDL是一门很厉害的语言，它强大的设计电路功能让人眼前一亮。</p>
<p>个人觉得VHDL这门语言与以往所学的语言大相径庭，但也有共同之处，你甚至能在里面看到很多汇编的影子。学一门语言我是打算按程序结构入手，逐渐递进，最后到完整的程序设定。</p>
<span id="more"></span>

<h2 id="VHDL程序结构"><a href="#VHDL程序结构" class="headerlink" title="VHDL程序结构"></a>VHDL程序结构</h2><p>每一种语言都需要固定的格式规范，在C系列中就是标志的Using namespace std，Java里面的Public class void main，Python严格的缩进制度…这些规范成就了每一门语言的功能与针对性。同样的，作为一种电路设计语言，VHDL的程序分成如下五个部分：</p>
<ul>
<li><p><strong>设计库-Library</strong></p>
<pre><code>    存放已编译的实体、结构体、包集合和配置
</code></pre>
<p>​        Storage the entity,Architecture,Package and configuration that have been complied</p>
</li>
<li><p>包集合-Package</p>
<pre><code>    存放共享的数据类型、常数和子程序等
</code></pre>
<p>​        Storage the constant,shared data type and sub program</p>
</li>
<li><p><strong>实体-Entity：</strong></p>
<pre><code>    描述所设计系统的外部接口信号
</code></pre>
<p>​        Describe the outer signal the system you design</p>
</li>
<li><p><strong>结构体-Architecture</strong></p>
<pre><code>    描述系统内部的结构与行为
</code></pre>
<p>​        Describe inner structure and behavior of the system</p>
</li>
<li><p>配置-Configuration</p>
<pre><code>    从库中选取所需单元组成设计的不同结构体
</code></pre>
<p>​        Select the units u need to construct different Architecture</p>
</li>
</ul>
<h2 id="Entity"><a href="#Entity" class="headerlink" title="Entity"></a>Entity</h2><ul>
<li>语法形式：</li>
</ul>
<figure class="highlight vhdl"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">entity</span> 实体名<span class="keyword">is</span></span><br><span class="line">		[<span class="keyword">generic</span> (类属参数说明) ;] <span class="comment">--这行其实我们实际应用很少有，哦对VHDL是--作为注释</span></span><br><span class="line">		[<span class="keyword">port</span> (端口说明) ;]</span><br><span class="line">	<span class="keyword">end</span> [<span class="keyword">entity</span>] [实体名]；</span><br></pre></td></tr></table></figure>

<p>端口里面也有分类：</p>
<ul>
<li>In （输入）</li>
<li>Out（输出）</li>
<li>Inout （双向）</li>
<li>Buffer （输出，但这个输出可以在内部再次利用）</li>
<li>linkage（无指定方向）</li>
</ul>
<blockquote>
<p><strong>In</strong> 信号只能被引用,不能被赋值；不可以出现在&lt;= 或 : = 的左边</p>
<p>In signal can only be quoted but no equalize. It can’t be shown on the left of “&lt;=” or”:=”</p>
<p><strong>out</strong> 信号只能被赋值,不能被引用；不可以出现在&lt;= 或 : = 的右边</p>
<p>Out signal can only be equalized bu no be quoted. It can’t be shown on the right of “&lt;=” or “:=”</p>
<p><strong>buffer</strong> 信号可以被引用,也可以被赋值；可以出现在&lt;= 或 : = 的两边</p>
<p>Buffer signal can also be quoted and equalized. Both side can it put of “&lt;=” or “:=”</p>
</blockquote>
<h2 id="Architecture"><a href="#Architecture" class="headerlink" title="Architecture"></a>Architecture</h2><ul>
<li>语法形式：</li>
</ul>
<figure class="highlight vhdl"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">architecture</span> 结构体名<span class="keyword">of</span> 实体名<span class="keyword">is</span></span><br><span class="line">	[说明语句] 内部信号、常数、元件、数据类型、函数等</span><br><span class="line"><span class="keyword">begin</span></span><br><span class="line">	[并行处理语句和<span class="keyword">block</span>、<span class="keyword">process</span>、<span class="keyword">function</span>、<span class="keyword">procedure</span>]</span><br><span class="line"><span class="keyword">end</span> [<span class="keyword">architecture</span>][结构体名]</span><br></pre></td></tr></table></figure>

<ul>
<li>结构体描述一个设计的结构或行为，把一个设计的输入和输出之间的关系建立起来<br> 一个实体可以有多个结构体，分别代表该实体的不同实现方案，各个结构体的地位是同等的。但很可惜的是，我们遇到的程序基本上是单个结构体的。</li>
</ul>
<p>而Architecture种也有子结构：</p>
<h3 id="BLOCK-块"><a href="#BLOCK-块" class="headerlink" title="BLOCK  块"></a>BLOCK  块</h3><p>BLOCK是一种在Architecture中的子结构。你肯定很好奇这有什么用，我们可以来看这样一个例子：</p>
<p>好家伙，你发现这玩意完全就可以替代掉Architecture，那为什么还要大费周折高出已给Block呢？</p>
<p>因为Block的出现，是为了<del>改善并行语句和结构的可读性</del><strong>分块转换变量为局部变量，从而保护某些信号。</strong></p>
<ul>
<li>并发执行，与描述顺序无关。</li>
<li>语法形式 ：</li>
</ul>
<figure class="highlight vhdl"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">块名称：<span class="keyword">BLOCK</span></span><br><span class="line">          [接口说明；]</span><br><span class="line">          [说明部分；]</span><br><span class="line">         <span class="keyword">BEGIN</span></span><br><span class="line">           并行处理语句；</span><br><span class="line">         <span class="keyword">END</span>  <span class="keyword">BLOCK</span> 块名称；</span><br></pre></td></tr></table></figure>

<p>所有在Block里面定义、说明的信号，在Block外面来看是无法访问的。</p>
<h3 id="Process-进程"><a href="#Process-进程" class="headerlink" title="Process 进程"></a>Process 进程</h3><p>Process存在的意义又是什么呢？Process其实完成了我们接触过的大部分顺序结构的工作：顺序执行程序指令。你可能会很惊讶，我们习以为常的顺序编程为什么在VHDL中被“特殊化“了，我个人的理解是对于一个电路来讲，它存在的意义是执行给定的指令，而执行效率最高的方式无疑是多任务多开的并行模式，所以不出意外我们都希望它是并行执行程序。一个Process对敏感信号保持持续扫描状态，一旦某一个敏感信号满足条件马上激活进程，完成对应的指令。</p>
<p>但请注意，对于某些比较烦人的单变量输出变化的要求，不得已我们才能使用顺序结构的语句来描述器件行为。虽然Process是顺序执行的，但在一个结构体中，可以有多个Process并行运算，你懂我意思吗？举个例子，你在鹏翔公寓的洗漱房，每天早上你拖着你懒惰的身子来到一个水龙头前，旁边也有一样不愿早起的懒狗。你的洗漱顺序是先刷牙再洗脸，但你旁边那个小帅可能是先刷牙然后刮个胡子，最后再洗脸。你们的”进程“是不同的，但水龙头流出来的水是独立的，你们互不影响。</p>
<ul>
<li>顺序执行，与描述顺序有关。</li>
<li>语法形式 </li>
</ul>
<figure class="highlight vhdl"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">进程名称：<span class="keyword">PROCESS</span>（敏感信号表）[<span class="keyword">IS</span>]</span><br><span class="line">          [接口说明；]</span><br><span class="line">          [说明部分；]</span><br><span class="line">         <span class="keyword">BEGIN</span></span><br><span class="line">           顺序处理语句；</span><br><span class="line">         <span class="keyword">END</span>  <span class="keyword">PROCESS</span> 进程名称；</span><br></pre></td></tr></table></figure>

<p>敏感信号其实未必列在信号表内，它可以是<code>WAIT UNTIL clock</code>一类的说明语句来激活进程。</p>
<h3 id="Subprogram-子程序"><a href="#Subprogram-子程序" class="headerlink" title="Subprogram 子程序"></a>Subprogram 子程序</h3><p>subprogram也分为两种：Procedure和Function。</p>
<ul>
<li>使用<strong>顺序语句</strong>。</li>
<li>目的：完成各种不同的定义和算法描述。</li>
<li>特点：完成重复性的计算工作，通常放置在包集合当中，被不同的实体所调用。可重载的特性，即允许有多个重名的子程序存在（具有不同的参数类型或者返回值类型）。</li>
</ul>
<p>我知道肯定也会有人问，他妈的都一样是顺序结构，为什么Process还不够用？还来个Procedure？<del>当我们英语很好分得清吗？</del></p>
<p>Procedure和Function的出现是为了多次利用。对于Process而言，他的返回值虽然没有明说，但我们动用一下小脑袋晃晃里面的水就不难发现：</p>
<p>Process的状态只有两个：等待执行和执行中。如此的局限性，自然不能对多个对象进行多次重复的操作，所以Function和Procedure就诞生了，这里我们可以看到i作为高级语言应有的尊严：至少他是有面向对象的意识了！不像汇编那么落智了！</p>
<h4 id="Function-函数："><a href="#Function-函数：" class="headerlink" title="Function 函数："></a>Function 函数：</h4><p>Function有一种微缩Entity+Architecture的思想在里面，他需要函数段和函数体两部分来构成。像不像C++？</p>
<ul>
<li>语法形式 </li>
</ul>
<figure class="highlight vhdl"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">FUNCTION</span> 函数名（参数表） </span><br><span class="line">	<span class="keyword">RETURN</span> 数据类型 ；</span><br><span class="line">    语法形式 </span><br><span class="line"><span class="keyword">FUNCTION</span> 函数名（参数表） </span><br><span class="line">	<span class="keyword">RETURN</span> 数据类型 <span class="keyword">IS</span></span><br><span class="line">          [定义语句]</span><br><span class="line">	<span class="keyword">BEGIN</span></span><br><span class="line">           顺序处理语句；</span><br><span class="line">	        <span class="keyword">RETURN</span> 返回值</span><br><span class="line"><span class="keyword">END</span>  函数名称；</span><br><span class="line"></span><br></pre></td></tr></table></figure>

<ul>
<li><p>用于对函数体的说明，放置在包集合的说明部分，对应于包集合内的函数体。不是必需的，在结构体中定义函数时，不需要函数首的说明。</p>
</li>
<li><p>重载。重载就是参数不同的同名函数的应用，值得注意的是四则运算（+-*/）的重载需要加双引号。</p>
</li>
</ul>
<h4 id="Procedure-过程："><a href="#Procedure-过程：" class="headerlink" title="Procedure 过程："></a>Procedure 过程：</h4><p>Procedure和Function一样由首+体构成。但很好玩的一点就是，在进程（Process）或<strong>结构体（Architecture）中不必定义过程首</strong>，而程序包中则必须定义。</p>
<ul>
<li>语法形式 </li>
</ul>
<figure class="highlight vhdl"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">PROCEDURE</span> 过程名（参数表） <span class="keyword">IS</span></span><br><span class="line">          [定义语句]</span><br><span class="line">		<span class="keyword">BEGIN</span></span><br><span class="line">           顺序处理语句；</span><br><span class="line">         <span class="keyword">END</span>  过程名称；</span><br></pre></td></tr></table></figure>

<ul>
<li>Procedure和函数一样可以重载。</li>
</ul>
<p>Procedure 和Function的联系、区别在于：</p>
<ul>
<li>函数可以有输入参数/也可以没有输入参数，必须有一个返回值（return）。</li>
<li>过程必须有参数，这些参数必须有数据类型（输入/输出/双向），对于输入类型默认为常量，对于输出/双向类型默认为变量，无return。</li>
<li>函数调用可作为表达式的一部分，过程则直接调用。</li>
</ul>
<h2 id="Package"><a href="#Package" class="headerlink" title="Package"></a>Package</h2><p>请留意我的分级，我把Package放到Architecture和Entity规划到<strong>同一类级别</strong>。</p>
<p>我个人对Package的理解是面向对象编程中的”类“。这个类里面可以定义很多骚操作/骚函数。</p>
<ul>
<li><p>罗列VHDL语言中所要用到的信号定义、常数定义、数据类型、元件描述、函数定义以及过程定义等内容。</p>
</li>
<li><p>包集合的使用</p>
<pre><code>语法形式：
  USE [库名].[包集合名].[项目名]
</code></pre>
<p>如：</p>
<pre><code> LIBRARY IEEE
USE IEEE.STD_LOGIC_1164.ALL
</code></pre>
</li>
<li><p>语法形式：</p>
</li>
</ul>
<figure class="highlight vhdl"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">PACKAGE</span> [包集合名] <span class="keyword">IS</span></span><br><span class="line">    [说明语句]</span><br><span class="line">  <span class="keyword">END</span> [包集合名] </span><br><span class="line"><span class="keyword">PACKAGE</span> <span class="keyword">BODY</span> [包集合名] <span class="keyword">IS</span></span><br><span class="line">    [说明语句]</span><br><span class="line">  <span class="keyword">END</span> [包集合名] </span><br></pre></td></tr></table></figure>

<figure class="highlight vhdl"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">Package</span> abc <span class="keyword">is</span></span><br><span class="line">	<span class="keyword">function</span> str_to_int(S : <span class="built_in">string</span>) <span class="keyword">return</span> <span class="built_in">integer</span>;</span><br><span class="line"><span class="keyword">End</span> abc</span><br><span class="line"></span><br><span class="line"><span class="keyword">Package</span> <span class="keyword">body</span> abc <span class="keyword">is</span></span><br><span class="line">   <span class="keyword">function</span> str_to_int(S : <span class="built_in">string</span>) <span class="keyword">return</span> <span class="built_in">integer</span> <span class="keyword">is</span></span><br><span class="line">   <span class="keyword">begin</span></span><br><span class="line">   ………..</span><br><span class="line">   <span class="keyword">end</span> str_to_int; </span><br><span class="line"><span class="keyword">End</span> abc</span><br><span class="line"></span><br></pre></td></tr></table></figure>



<p>到这里，你已经对VHDL这门语言有一定的初步了解了。你现在应该能做到：</p>
<ul>
<li>拿到程序后，知道程序的执行顺序</li>
<li>拿到程序后，分辨出各个变量类型</li>
<li><del>拿到程序后，不至于无话可说</del></li>
</ul>
<h2 id="VHDL操作对象类型"><a href="#VHDL操作对象类型" class="headerlink" title="VHDL操作对象类型"></a>VHDL操作对象类型</h2><p>很有趣的一点就是，VHDL中的操作对象类型很少，只有三种：Constant，Variable和Signal。</p>
<p>但类型少并不是它有趣的理由，有趣的理由在于，作为一门对类型极度严格要求的语言，在这三种类型衍生出来的数据类型却五花八门：</p>
<p>数组，整数……很多很多。这从另一个维度说明了VHDL的大道至简的哲学思想。</p>
<ul>
<li>常数(constant):是一个固定的值，常数说明就是对某一常数名赋予一个固定的值，常量只能在说明时被赋值。<pre><code>语法形式:constant 常数名：数据类型：=表达式;
  例: constant VCC ：real ：= 5.0;
</code></pre>
</li>
<li>变量(variable):只能在process、function和procedure结构中使用，是一个局部量。<pre><code>语法形式:variable 变量名:数据类型 约束条件:=表达式;
  例:variable x,y ： integer;
      variable count ： integer range 0 to 255 ：= 10;
</code></pre>
</li>
<li>信号(signal):电路内部硬件连接的抽象。信号可以在architecture、package、entitiy中声明。是一个<strong>全局量</strong>。<pre><code>语法形式:signal 信号名:数据类型 约束条件:=表达式;
  例:signal clk ：std_logic ：= ‘1’;
</code></pre>
</li>
</ul>
<p>信号和变量，一个针对全局，一个是局部。但二者的使用，又有什么不同呢？</p>
<ul>
<li>(1) 信号赋值是有一定延迟的 ，在进程中，信号的代入是在 <pre><code> 进程结束或者WAIT语句时进行。 而变量赋值没有延迟。
</code></pre>
</li>
<li>(2) 对于进程语句来说，进程只对信号敏感 ，不对变量敏感。</li>
<li>(3) 信号在某一时刻除了具有当前值外 ，还具有一定的历史<pre><code> 信息 ( 保存在预定义属性中 ) ，可以形成波形 。而变量
 在某一时刻仅包含一个值。
</code></pre>
</li>
<li>(4) 信号可以是<strong>多个进程的全局信号</strong> ，实现在多个进程之间<pre><code> 传递信息; 而变量只在定义它的过程、函数和进程中可见。
</code></pre>
</li>
<li>(5) 信号是硬件中连线的抽象描述，其功能是保存变化的数<pre><code> 据值和连接子元件。变量在硬件中没有类似的对应关系，
 主要应用于高层次的建模中。
</code></pre>
</li>
<li>(6) <strong>信号赋值和变量赋值</strong>的格式如下所示 :<pre><code>          信号 &lt; =表达式 ;
                变量 ：=表达式 ;
</code></pre>
</li>
</ul>
<h2 id="VHDL预定义数据类型"><a href="#VHDL预定义数据类型" class="headerlink" title="VHDL预定义数据类型"></a>VHDL预定义数据类型</h2><ul>
<li><p>布尔数据类型(只有FALSE和TRUE两种取值)</p>
</li>
<li><p>BIT数据类型(BIT_VECTOR数据类型‘0’、‘1’取值)</p>
</li>
<li><p>字符数据类型（字符串数据类型‘A’）</p>
</li>
<li><p>整数数据类型（自然数和正整数数据类型，注意他的取值范围在-2147483647~+2147483647）</p>
<p>表示进制的时候加上#，比如16#D#表示十六进制整数，2#11001100#二进制整数，10E4十进制整数</p>
</li>
<li><p>实数数据类型（仅能在仿真器使用）</p>
</li>
<li><p>时间数据类型（唯一的物理量纲，不能在仿真器中使用）</p>
</li>
</ul>

    </div>

    
    
    

      <footer class="post-footer">

        


        
    <div class="post-nav">
      <div class="post-nav-item">
    <a href="/2021/12/15/DQN%E8%87%AA%E6%88%91%E5%AE%9E%E8%B7%B5/" rel="prev" title="𝐒𝐭𝐫𝐞𝐞𝐭 𝐅𝐢𝐠𝐡𝐭𝐞𝐫 𝐯𝐬. 𝐃𝐐𝐍 𝐅𝐢𝐠𝐡𝐭𝐞𝐫">
      <i class="fa fa-chevron-left"></i> 𝐒𝐭𝐫𝐞𝐞𝐭 𝐅𝐢𝐠𝐡𝐭𝐞𝐫 𝐯𝐬. 𝐃𝐐𝐍 𝐅𝐢𝐠𝐡𝐭𝐞𝐫
    </a></div>
      <div class="post-nav-item"></div>
    </div>
      </footer>
    
  </article>
  
  
  



          </div>
          

<script>
  window.addEventListener('tabs:register', () => {
    let { activeClass } = CONFIG.comments;
    if (CONFIG.comments.storage) {
      activeClass = localStorage.getItem('comments_active') || activeClass;
    }
    if (activeClass) {
      let activeTab = document.querySelector(`a[href="#comment-${activeClass}"]`);
      if (activeTab) {
        activeTab.click();
      }
    }
  });
  if (CONFIG.comments.storage) {
    window.addEventListener('tabs:click', event => {
      if (!event.target.matches('.tabs-comment .tab-content .tab-pane')) return;
      let commentClass = event.target.classList[1];
      localStorage.setItem('comments_active', commentClass);
    });
  }
</script>

        </div>
          
  
  <div class="toggle sidebar-toggle">
    <span class="toggle-line toggle-line-first"></span>
    <span class="toggle-line toggle-line-middle"></span>
    <span class="toggle-line toggle-line-last"></span>
  </div>

  <aside class="sidebar">
    <div class="sidebar-inner">

      <ul class="sidebar-nav motion-element">
        <li class="sidebar-nav-toc">
          文章目录
        </li>
        <li class="sidebar-nav-overview">
          站点概览
        </li>
      </ul>

      <!--noindex-->
      <div class="post-toc-wrap sidebar-panel">
          <div class="post-toc motion-element"><ol class="nav"><li class="nav-item nav-level-2"><a class="nav-link" href="#VHDL%E7%A8%8B%E5%BA%8F%E7%BB%93%E6%9E%84"><span class="nav-number">1.</span> <span class="nav-text">VHDL程序结构</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#Entity"><span class="nav-number">2.</span> <span class="nav-text">Entity</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#Architecture"><span class="nav-number">3.</span> <span class="nav-text">Architecture</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#BLOCK-%E5%9D%97"><span class="nav-number">3.1.</span> <span class="nav-text">BLOCK  块</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#Process-%E8%BF%9B%E7%A8%8B"><span class="nav-number">3.2.</span> <span class="nav-text">Process 进程</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#Subprogram-%E5%AD%90%E7%A8%8B%E5%BA%8F"><span class="nav-number">3.3.</span> <span class="nav-text">Subprogram 子程序</span></a><ol class="nav-child"><li class="nav-item nav-level-4"><a class="nav-link" href="#Function-%E5%87%BD%E6%95%B0%EF%BC%9A"><span class="nav-number">3.3.1.</span> <span class="nav-text">Function 函数：</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#Procedure-%E8%BF%87%E7%A8%8B%EF%BC%9A"><span class="nav-number">3.3.2.</span> <span class="nav-text">Procedure 过程：</span></a></li></ol></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#Package"><span class="nav-number">4.</span> <span class="nav-text">Package</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#VHDL%E6%93%8D%E4%BD%9C%E5%AF%B9%E8%B1%A1%E7%B1%BB%E5%9E%8B"><span class="nav-number">5.</span> <span class="nav-text">VHDL操作对象类型</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#VHDL%E9%A2%84%E5%AE%9A%E4%B9%89%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B"><span class="nav-number">6.</span> <span class="nav-text">VHDL预定义数据类型</span></a></li></ol></div>
      </div>
      <!--/noindex-->

      <div class="site-overview-wrap sidebar-panel">
        <div class="site-author motion-element" itemprop="author" itemscope itemtype="http://schema.org/Person">
  <p class="site-author-name" itemprop="name">花</p>
  <div class="site-description" itemprop="description">我最喜欢cybersh1t了</div>
</div>
<div class="site-state-wrap motion-element">
  <nav class="site-state">
      <div class="site-state-item site-state-posts">
          <a href="/archives/">
        
          <span class="site-state-item-count">2</span>
          <span class="site-state-item-name">日志</span>
        </a>
      </div>
  </nav>
</div>
  <div class="links-of-author motion-element">
      <span class="links-of-author-item">
        <a href="https://github.com/dafeigy" title="GitHub → https:&#x2F;&#x2F;github.com&#x2F;dafeigy" rel="noopener" target="_blank"><i class="fab fa-github fa-fw"></i>GitHub</a>
      </span>
      <span class="links-of-author-item">
        <a href="mailto:1070642765@qq.com" title="E-Mail → mailto:1070642765@qq.com" rel="noopener" target="_blank"><i class="fa fa-envelope fa-fw"></i>E-Mail</a>
      </span>
      <span class="links-of-author-item">
        <a href="https://weibo.com/cybercolyce" title="Weibo → https:&#x2F;&#x2F;weibo.com&#x2F;cybercolyce" rel="noopener" target="_blank"><i class="fab fa-weibo fa-fw"></i>Weibo</a>
      </span>
  </div>



      </div>

    </div>
  </aside>
  <div id="sidebar-dimmer"></div>


      </div>
    </main>

    <footer class="footer">
      <div class="footer-inner">
        

        

<div class="copyright">
  
  &copy; 
  <span itemprop="copyrightYear">2022</span>
  <span class="with-love">
    <i class="fa fa-heart"></i>
  </span>
  <span class="author" itemprop="copyrightHolder">花</span>
</div>

        








      </div>
    </footer>
  </div>

  
  <script src="/lib/anime.min.js"></script>
  <script src="/lib/velocity/velocity.min.js"></script>
  <script src="/lib/velocity/velocity.ui.min.js"></script>

<script src="/js/utils.js"></script>

<script src="/js/motion.js"></script>


<script src="/js/schemes/pisces.js"></script>


<script src="/js/next-boot.js"></script>




  















  

  

</body>
</html>
